home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / The World of Computer Software.iso / mr2_138.zip / READ.ME < prev    next >
Text File  |  1993-01-11  |  50KB  |  1,005 lines

  1. MR/2 - A QWK Compatible Mail Reader for OS/2.  01/11/93
  2.  
  3. Copyright (c) 1992, Knight Writer Software Company.
  4. All rights reserved.
  5.  
  6. ===================================================================
  7.                           N O T I C E
  8. ===================================================================
  9. This IS a shareware package, and does require a registration fee if
  10. you choose to continue using it after 30 days.   The registration
  11. fee is currently $20 US.  Eventually, the product MAY have a
  12. "begging" screen with a key-file that will register the software
  13. and suppress it.  The more interest I get, the more likely I am to
  14. continue with improvements.
  15. ------------------------------------------------------------------
  16.  
  17. NOTES:
  18.  
  19. RE: Complaints about crashing with the E editor.
  20.  
  21. I can't for the life of me figure this out.  I've been personally using E
  22. for replies for 2-3 weeks now, and it works just fine.  I don't like it, but
  23. it works OK.  My suggestion:  get TINY ED for OS/2 or TE.  I'm working on
  24. my own editor, either built-in or external, but it isn't hi-pri right now.
  25.  
  26.  
  27. RE: Failures when trying to return to previous reading position.
  28.  
  29. This is pretty simple code, but there is a big problem.  If you happen to
  30. be downloading while you're reading, and your comm program renames packets
  31. automatically, MR/2 may be setting the bookmark EA's on the wrong file.
  32. For example, if I'm reading NerdNook.qwk and at the same time I start to
  33. dowload a new packet from them using ZModem, the packet I'm actually reading
  34. gets renamed to "whatever" and I've still got a packet NerdNook.Qwk, it just
  35. isn't the right one.  When I close the packet, MR/2 writes the bookmark file
  36. to the new, incorrect packet's EA's.  If the "last position" happends to
  37. be past the end of file or out of the new conference's bounds, an error
  38. will be reported.
  39.  
  40. I'm open for suggestions here; I could check the date/size of the original
  41. file vs. the "new" file and warn if they don't match - or try to find the
  42. original.  The warning is easy, trying to find the original file doesn't
  43. sound that interesting to me :)
  44.  
  45.  
  46. KNOWN BUGS AND STUFF
  47. ====================
  48.  
  49. Mouse support is missing from some of the "inform user" screen.
  50.  
  51. The TEMPORARY directory MUST remain a subdirectory of the MR2 home dir.
  52.  
  53. You can't use "\" or "&" as part of any search text (since MR/2 uses them
  54. as delimiters).
  55.  
  56. You can't cancel a search until the first "hit" is displayed.  This is
  57. particularly irritating when soundex searching, since soundexing is
  58. noticably slower.
  59.  
  60. If you set "SkipReadMessages" to true, you cannot gain access to a
  61. conferences where all messages have previously been read.
  62.  
  63. I don't supply an editor.  You'll have to find your own or use E or EPM.
  64. QEdit for OS/2 works nice as an inexpensive, character-mode editor
  65. Also, there's an OS/2 editor TE-something that I heard was OK.
  66.  
  67. You can't send ADD/DROP conference messages yet.  This seems easy enough,
  68. so I should be able to add it in soon.
  69.  
  70. ANSI support is not provided in a limitted fashion and @variables
  71. are not converted.  Sorry, maybe later.
  72.  
  73. Other frills that have not yet been addressed:  Bulk marking, forwarding
  74. messages, carbon copies, twit filter, function key assigning. There are
  75. probably others.  Feel free to bombard me with requests.
  76.  
  77. No long file name support.  Since QWK is a DOS thing, the only place I can
  78. see using it is for packet names (if the user renames it).  Any ideas?
  79.  
  80.  
  81.  
  82. Changes included in v1.01
  83. -------------------------
  84.  
  85. o   By request, 43 and 50 line mode are now supported via a new .ini entry.
  86.     You can supply a VideoMode=xx parameter in MR2.INI, where xx can be 25,
  87.     43 or 50. Any other numbers will be ignored.  All Selection lists and
  88.     displays are adjusted to match the screen dimensions.  For those with
  89.     vision better than mine ... :)
  90.  
  91. o   Clicking the mouse on the Subject area while viewing a message still
  92.     simulated hitting the 'T' key.  This key no longer moves forward by
  93.     thread, it steals taglines.  Now, clicking on Subject is translated
  94.     properly to an 'H'.
  95.  
  96. o   When filling a field in a "form" (e.g., the Subject field of the
  97.     Message Header Edit form), overtype-mode would sometimes echo characters
  98.     that weren't there.  This happened after some characters were deleted;
  99.     the "ghost" characters appeared at the end of the string.  This is fixed.
  100.  
  101. o   The automatic splitting of long replies is now controlled via a
  102.     MR2.INI parameter SplitLongReplies (set to Yes or No).  If set to
  103.     yes, MR/2 will split replies up so that no more than 100 lines are
  104.     in each message.  If set to no, then no splitting is performed and
  105.     one large message is create.  The default is to split message.
  106.  
  107. o   Previously, long replies were always split.  The "cut-off" point was
  108.     95 message lines, and a "<cont'd>" line was appended with a blank line.
  109.     I've seen some message processors cut the first part by one lines,
  110.     making the second message consist of 1 or 2 meaningless lines.  I've
  111.     changed the "split at" number to 92 lines.
  112.  
  113. o   And another MR2.INI parameter has been added:  AllUpperCase controls
  114.     how the Subject, From and To lines are treated after editing a message's
  115.     header information.  Previously, all fields were converted to upper case.
  116.     Now, if AllUpperCase=No, the case is left as entered.  (By request...)
  117.  
  118. o   The message header editing form now allows you to "up arrow" into the
  119.     From field and modify it.  NOTE:  many BBS's will reject messages
  120.     whose FROM line do not match the user's logon name.
  121.  
  122.  
  123. Changes included in v1.02
  124. -------------------------
  125.  
  126. o   Bug fix:  User reported a problem with conference numbers showing
  127.     incorrectly.  Turns out that some packets have a single byte
  128.     conference field in the header, and the other byte used by newer mail
  129.     doors was set to a space (hex 20).  This caused conference numbers to
  130.     be report as 8192 more than their actual value.
  131.  
  132.  
  133. Changes included in v1.03
  134. -------------------------
  135.  
  136. o   Fixes to tagline logic.  If tagline file was non-existant, MR/2 would
  137.     crash.  If file was empty, added tags would not show up until you
  138.     exited and reentered.
  139.  
  140. o   Selection list problems fixed.  Highlighting of the line above displayed
  141.     list on occasion.  Selection bar will no longer move into unfilled
  142.     areas.  Scrolling up and down through list no longer displays end-of-list
  143.     "ghost" entries.
  144.  
  145. o   Added some tests for over-length taglines.  Previously, a tagline
  146.     longer than 120 character would lock the session.
  147.  
  148. o   Forms display routine would show an over-length tagline w/o truncating
  149.     it.  Display of tagline extended to column 80, then would wrap to the
  150.     next line.  This has been corrected.
  151.  
  152. o   Actually added in 1.01 is the ability, from the packet selection screen,
  153.     to toggle video modes.  The "V" key will toggle from displayed lines
  154.     from 25 to 43, from 43 to 50, and then from 50 back to 25.
  155.  
  156. o   MR/2 would lock up when saving a reply (or a new message).  This
  157.     happened only with BBS doors that would pad the user name (in control.dat)
  158.     with spaces.  The lockup occured after pressing F10 to accept the
  159.     message header information.  This shouldn't happen any more :)
  160.  
  161. o   NOTE - NOTE - NOTE:  The problem with packets proclaiming "no mail to
  162.     read" seems to be related to missing .NDX files in the packet.  The
  163.     QMAIL door in particular lets you suppress these files, and some
  164.     mail readers (SLMR/OLX) don't use them, anyway.  MR/2 requires these
  165.     file, at least today.  I WILL provide an index building function in the
  166.     very next release, figure by 5/22 worst-case.
  167.  
  168. o   OK, so I added the routine to create NDX files if they aren't there.
  169.     (See above) Testing on this was minimal, so please report any problems.
  170.     Packets without .NDX files should no longer report "no mail found".
  171.  
  172.  
  173. Changes included in v1.04
  174. -------------------------
  175.  
  176. o   You may now create a supplemental "INI" file for any/all BBS's that
  177.     you get mail from.  MR/2 still loads its options from MR2.INI, but you
  178.     may now change some of these options automatically by BBS, when a packet
  179.     is opened.  Once the packet is unpacked and the BBS "ID" is extracted,
  180.     MR/2 checks its "base" directory (where MR2.INI resides) for a file
  181.     named after the BBS, with a ".INI" suffix.  For example, after
  182.     unpacking a QWK packet from PC-OHIO, MR/2 will load options from a file
  183.     named "PC-OHIO.INI", if one exists.  Obviously, some options will have
  184.     no effect (e.g., PacketPath has already been used and is no longer
  185.     pertainent, as is WorkPath), but things like tagline files and quoting
  186.     styles can be changed on a BBS basis.
  187.  
  188.     If a "BBS" .INI file is accessed, MR/2 will reload the global MR2.INI
  189.     file when the current packet is closed.
  190.  
  191. o   New INI parameter "TagStyle" has been added.  You may specify either
  192.     FIDONET (the default) or PCBOARD.  If Fidonet is specified, taglines
  193.     will use "*" characters to delimit MR/2's signiture.  If PCBOARD
  194.     style is requested, the "block" character used by SLMR/OLX will be
  195.     substituted.
  196.  
  197. o   Read-ahead by thread (the "H" key) has been enhanced to recognize
  198.     subjects prefixed with "RE:" or "RE: " as matching.  Messages will
  199.     also match if the subject matches the original *less* the "RE:".
  200.  
  201. o   Install now includes Register.Doc for easier user registration.
  202.  
  203.  
  204. -   That's it for this revision.  I *almost* added a large section of code
  205.     for twits and canned searches, but this is going to take some time to
  206.     code and even more time to test and debug.  I'll make that available in
  207.     a week or two, along with fixes for any other reported bugs.
  208.  
  209.     BTW - a PM version is in a very primitive form, anyone interested in
  210.     giving me some useful feedback?  First, should it be MR/2 PM or MR/PM?
  211.  
  212.  
  213. Changes included in v1.1
  214. -------------------------
  215.  
  216. o   The Reference number field was not being set and maintained properly.
  217.     If you replied to a message, that message's reference number would
  218.     get copied into the replies Ref#.  Then if you would re-edit the reply
  219.     later, the Ref# would be set to the conference number.  I've now
  220.     staightened this mess out and it seems to work properly.
  221.  
  222. o   Added a new MR2.INI parameter "WrapLinesAtColumn" that defaults to 80.
  223.     This should ease the problems with users that depend on the system "E"
  224.     editor and its "word wrapping" function.  MR/2 will let no line extend
  225.     beyond the value supplied here, and will insert a CR/LF between words
  226.     to keep text in bounds.
  227.  
  228. o   You may now set the MR2.INI variable "VideoMode" any of the values
  229.     25, 28, 34, 40, 43, 50 or 60 to represent the number of lines to
  230.     display.  Also, the V toggle while on the packet select screen has
  231.     been enhanced to toggle through all of these values.
  232.  
  233. o   MR/2 now accepts one or more file names identifying .QWK packet as
  234.     command line parameters.  For example, typing:
  235.  
  236.         MR2 E:\DL\NERDNOOK.QWK
  237.  
  238.     will invoke MR/2 and automatically select the named packet for reading.
  239.     More than one packet may be specified, MR/2 simply opens the "next"
  240.     packet when the previous packet is closed.
  241.  
  242.     When all packets on the command line have been read, MR/2 returns to
  243.     the packet selection screen and waits for a new selection.  If you wish
  244.     to have MR/2 exit after all specified files have been processed, set the
  245.     INI variable "ExitAtEndOfParameters" to YES.
  246.  
  247.     This also allows for an "association" to be set up using WPS settings.
  248.     If a new ICON is created to invoke MR/2 and "*.qwk" is set as an
  249.     association, then clicking on a QWK packet inside the file manager is
  250.     all that's necessary to read a packet.
  251.  
  252. o   Cosmetic:  "Pick a Conferences" when writing a "new" message now
  253.     reads correctly.
  254.  
  255. o   Cosmetic:  when using video lines other than 25, the search status
  256.     message would update always on line 25.  This now moves with the
  257.     number of lines displayed.
  258.  
  259. o   When editing the message header, F4 may be used to select from a list
  260.     of available conferences.  This is useful when moving a message from
  261.     its source conference into another.  By request.
  262.  
  263. o   The master conference list now displays in alphabetical order by name.
  264.     Previously, conferences listed in the order they occured in the BBS's
  265.     configuration file.
  266.  
  267. o   NOW, there's a new INI parameter, "SortMasterConferences" which
  268.     defaults to NO (old-style non sorted list).  Specifying YES will
  269.     sort the master conference list alphabetically.
  270.  
  271. o   The "Z" key, used when viewing a message, now allows you to "Zip" to
  272.     the next "unread" message in a conference.
  273.  
  274. o   Threaded reading has been greatly enhanced.  First, a new INI
  275.     option must be set - "MessageOrder=Subject" (the default is "None").
  276.     This enables all sorts of new goodies :)  Basically, setting this to YES
  277.     will sort the messages by thread before reading begins.  Care was taken
  278.     to "clump" all "RE:" type messages in with their original non-RE'd
  279.     subjects.
  280.  
  281. o   If MessageOrder has been set to "Subject", some new keys are available.
  282.     While viewing messages, the TAB key will skip ahead to the next thread.
  283.     The BACKSPACE key will skip backwards to the previous thread.  Even
  284.     better, pressing "Q" will invoke the Quick Thread Summary screen.  This
  285.     list all threads in the conference, in alphabetical order, along with
  286.     the count of previously read messages vs. total message in the thread.
  287.     All threads that have been read completely are marked with an "*".
  288.     This is a full feature "selection" screen, so you can page around,
  289.     pick and peck at only the subjects that interest you.
  290.  
  291. o   I added another option - I'm not very happy with it, but you may find it
  292.     somewhat useful.  The INI parameter "ThreadChangeTone" accepts two
  293.     numeric parameters (e.g., "ThreadChangeTone=20000,10").  These parameters
  294.     are passed to the OS/2 kernel procedure DosBeep() and represent the
  295.     frequency and duration of the tone to make when you "page" into a "new"
  296.     thread.  The values 20000,10 make a quick "clicking" like sound that
  297.     isn't *too* anoying.  I'm open to ideas on this one ... :)
  298.  
  299. o   Default tagline file is now MISC2.TAG in an attempt to minimize
  300.     anti-Windows discussions in OS/2 related conferences.  OS2.TAG is still
  301.     in the distribution zip, you'll just have to set it yourself, if you
  302.     want it.
  303.  
  304. o   Minor bug: List Selection processing would exit a list if HOME was
  305.     pressed on the "first" page of records.  Now, user stays in the
  306.     selection list and the cursor moves to the first entry.
  307.  
  308. o   When Sorting by Subject, the 'H' and the 'B' keys used the old way
  309.     (searching forwards/backwards by subject) aren't that useful.  I've
  310.     changed their behaviour slightly in this case.  The 'H' key will move
  311.     forward a message, and if the "thread" changes, will display the
  312.     Quick Thread Summary screen.  The 'B' key will move backwards one
  313.     message pull up the summary screen if you move into a "new" thread.
  314.     NOTE that the selecting a thread from the summary screen moves you to
  315.     the *first* record in the thread, even if the 'B' key was previously
  316.     used.  There currently is no way to jump to the last message in a
  317.     thread.  Is this capability desirable?
  318.  
  319. o   The default for the setting of ExtendedAttributes is now YES.  If you
  320.     do not use the E editor, some minor speed increases may be achieved
  321.     simply by setting this to NO.  Note that this is only an issue with
  322.     users creating their INI file for the first time (existing INI's are
  323.     not affected by this change).
  324.  
  325.  
  326. Didn't get to twits and canned searches yet - Sorry!  I think the threading
  327. stuff will satisfy more of you, anyway :)
  328.  
  329.  
  330. Changes included in v1.2x
  331. -------------------------
  332.  
  333. o   Thread sorting/grouping would sometimes misplace a message because the
  334.     last character was chopped.  I've modified thread matching to check
  335.     24 characters instead of 25.  I can't see where this could be a problem.
  336.  
  337. o   Disabled many keys (Q, I, Tab, Backspace) while searching all conferences.
  338.     These weren't functional under searching-all conditions, and caused
  339.     strange things to happen when invoked.
  340.  
  341. o   Pre-defined searches have been added.  I did this for myself, but I'm
  342.     sure many will see the benefit.  Basically, you can build your own
  343.     conferences by defining search criteria.  All messages found to match
  344.     will he included in the defined conference.  The "MakeConference"
  345.     parameter is added in the MR2.INI file, or can be added into the BBS
  346.     specific INI file.  See the included file "Search.Ini" for an example.
  347.     You can have criteria listed in the MR2.INI *and* the BBS ini, and
  348.     they will be combined correctly.
  349.  
  350.     The following set of lines:
  351.  
  352.         MakeConference = MR/2
  353.         String = MR/2
  354.  
  355.     will result in MR/2 searching (in the background, multithreaded) all
  356.     message for the string "MR/2" and creating a custom "MR/2" conference
  357.     that will appear in the Conferences w/Mail menu.  Once the defined
  358.     custom conferences have been built, and you return to select a
  359.     conference, these new conferences will be listed.
  360.  
  361.     The number of search result conferences is "unlimitted" - at least in
  362.     a practical sense.  Memory is the issue, and valid file names.  I use
  363.     prefixes of A00 thru A99, up to Z99.  That's 2600 possible conferences.
  364.     If someone needs more, please let me know :)
  365.  
  366.     A single pass is made through the message base - for each message, all
  367.     combinations of search criteria are evaluated and the message is
  368.     recorded in any/all of the conferences it's found to belong to.  MR/2
  369.     will "beep" (low sounding tone) when it's done searching.  I'll INI-ize
  370.     this sound later.
  371.  
  372.     As another example:
  373.  
  374.         MakeConference = DR DEBUG/C/C++ & OS/2
  375.         Conferences=93,99,111
  376.         String = OS/2
  377.  
  378.     defines a conference that will display with a rather verbose name,
  379.     and will contain all message from conferences 93, 99 and 111 in which
  380.     "OS/2" was found.  A conference number of "*", or a missing conference
  381.     line will cause ALL conferences to be searched.
  382.  
  383.     This feature is particularly handy for me.  I'm a diehard CTOS fan, and
  384.     I code a commercial bar coding software package.  If these topics ever
  385.     appear anywhere, I'd like to know.  Since they rarely appear, I
  386.     rarely bother to search for them.  With a pre-defined search, these
  387.     words are always checked for, and I'll never(*) miss an occurence due
  388.     to laziness.  I can simply add the lines:
  389.  
  390.         MakeConference = Miscellaneous
  391.         Conferences=*
  392.         String = Barcode\Bar Code\CTOS
  393.  
  394. o   Other INI parameters have been added to compliment the new
  395.     MakeConference option. The parameter "ShowEmpties" controls whether
  396.     empty custom conferences are to be displayed with message counts of
  397.     "(0)".  If NO is specified, empty conferences do not appear at all
  398.     in the conference list.  "DisplayStatus" will show the message
  399.     search/hit counter on the bottom of the screen if set to YES.
  400.     "SeparaterBar" will place a line between the normal and custom
  401.     conferences if set to YES.
  402.  
  403. o   Fixed a bug in the logic that used to split long messages.  I messed
  404.     this up when I put in word wrapping - it wouldn't really split messages,
  405.     it simply put all lines in the first message and created an empty
  406.     "cont'd" message.
  407.  
  408. o   In testing the message splitting, I discovered that replies over 32K
  409.     in size weren't even registering.  This equates roughly to 800 lines of
  410.     message text.  The reply builder now accomodates messages up to
  411.     64K in length.  This is roughly 1600 lines of text, or 15-16 messages
  412.     "cont'd" from the first.
  413.  
  414. o   AND still while testing the message splitting logic, I found an even
  415.     bigger problem with replies.  If the reply file ever reached a total
  416.     size greater than 32K, replies would be ignored.  This had to do with
  417.     using an integer to hold the file size, and having it overflow.  It now
  418.     uses a long value and will function correctly.  I'm suprised no one
  419.     caught this - or maybe they did and didn't report it.
  420.  
  421. o   Conferences for which MR/2 was left to build NDX files for could not
  422.     be searched due to a problem with the way the searching functions
  423.     used the internal NDX files.  This became apparent when I tried to
  424.     search through the new custom conferences.  This has all been corrected.
  425.  
  426. o   Removed the annoying beeps when selecting from a list and you hit the
  427.     uparrow or downarrow too many times.
  428.  
  429. o   Converted all thread code to use _beginthread/_endthread.  Previously,
  430.     I was using DosCreateThread and mixing in some C runtime library
  431.     calls.  While this seemed to work OK, I figured I'd play it safe and
  432.     convert, especially considering the strange trouble some folks are
  433.     having (although I'd like to blame the E editor :).
  434.  
  435. o   Modified tons of code to support 4 digit numbers for index file.  Most
  436.     BBS's carry under 1000 conferences, but some (Channel 1 in particular)
  437.     boast over 1000 and have NDX files like "1654.NDX".  All old code was
  438.     geared to fixed 3-digit numbers.
  439.  
  440.     A benefit (?) of this is that custom "made" conferences now are numbered
  441.     A0000-Z9999, which gives us more breathing room (as if 2600 custom
  442.     conferences weren't enough :)  Now you (theoretically) have up to 26000.
  443.  
  444.     EditHeader now functions just a little differently when specifying a
  445.     conference number.
  446.  
  447. o   On Custom-made conferences, by default the search string is found in
  448.     all conference messages and aligned as if a search was performed.  If
  449.     you wish to suppress this action, set the INI file parameter
  450.     "PositionOnMatchLine" to NO.
  451.  
  452. o   When "Replies exist, keep?" is denied, the .rep file is now actually
  453.     renamed to a .old file.  I've had happy fingers too often and lost
  454.     reply(s).  This is not optional and is automatic - I'll add an INI
  455.     parameter to control it later.
  456.  
  457. o   Split out all pre-1.0 data from this file into oldread.me.  I'll
  458.     reorganize the whole thing later - probably with version 2.0.
  459.  
  460. o   Mouse cursor would not hide properly when placed past line 25 (in
  461.     non-standard video modes).  Cursor would cause streaking and generally
  462.     misbehave.  This has been fixed.
  463.  
  464.  
  465. Changes included in v1.3
  466. ------------------------
  467.  
  468. o   Scroll bars are now integrated into DLSelect (the selection list
  469.     routines).  You can use the mouse to scroll through lists.  I've also
  470.     made clicking on the divider line directly above the first entry to mean
  471.     "page up".  Clicking on the bottom line of any selection list box
  472.     means "page down".
  473.  
  474.     The scrolling routines need some work - mostly cosmetic.  One annoying
  475.     problem is the lack of a mouse repeat when holding the LMB down.  I'm
  476.     not sure why I don't get this - I'll have to fiddle with ZTC's low
  477.     level event handling functions again :(.  (In other words, holding the
  478.     mouse down on the up or down arrows only registers once per click -
  479.     if you hold it for half and hour but only "click" once, the display
  480.     moves only one line.)
  481.  
  482. o   I've used ZTC's event "timer" to get a mouse repeat.  Works pretty well.
  483.     Now to test it against time :)
  484.  
  485. o   Selection lists now allow for "jumping" to a letter prefix.  For example,
  486.     while viewing the Master Conference list, pressing "O" will jump to
  487.     the NEXT conference that starts with an "O".  Immediately pressing "S"
  488.     will jump to the next conference that starts with "OS".  Pressing
  489.     any non-printable key (e.g., up arrow) will reset the prefix string to
  490.     nothing.  Prefix search starts at the current cursor position and works
  491.     forward only.
  492.  
  493. o   The thread sort, which I thought to be "static", turned out to be pretty
  494.     votatile.  This was pretty obvious, I just didn't connect with what was
  495.     happenning.  I've fixed it so that identical subjects are sub-sorted by
  496.     message number.  This ought to keep everything in "order" within each
  497.     thread.
  498.  
  499. o   Line wrapping for replies has been fixed to "trim" leading spaces from
  500.     next line.  Previously, if a line wrapped so as to end with more than
  501.     one space before the next line's word, these extra spaces would be
  502.     left in front of the line.  This has been corrected.
  503.  
  504. o   Clock: And another ZTC bug wiped out.  Zortech's strftime function
  505.     messed up the %I parameter for hours in 01->12 format.  The display
  506.     would progress from 11:59 to 01:00 at midnight.  Wrong!  I've
  507.     corrected this and all clock displays seem to now work correctly.
  508.  
  509. o   If using PCBoard style taglines, I now use three dashes instead of
  510.     underlines for the tearline.  If Fido mode, underlines are used.
  511.     We'll see if this makes everybody happy.
  512.  
  513. o   I've included two icons with the distribution zip: mr2.ico and
  514.     email.ico.  MR2.ico is a Nick Knight original and I'm not very proud
  515.     of it :(.  Maybe I'll play with it some more and purty it up.  EMAIL
  516.     is a modified ICON I scarfed and looks IMO nicer.  Maybe I'll add
  517.     some more possibilities ...
  518.  
  519. o   If all replies from an "existing" reply file were killed the
  520.     original reply file was not deleted.  MR/2 counted zero replies, so
  521.     it figured there was nothing to do, and any old file remained
  522.     untouched.  Now, I rename the old .rep file to a .old file.
  523.  
  524. o   The 'V' key, while viewing a message, has always been there to change
  525.     video modes while reading any message.  I never documented this because
  526.     of various bugs.  Well, someone discovered it and reported the bugs,
  527.     which I now believe to be fixed.  'V' will now toggle through the
  528.     video modes (number of lines) while viewing any message.
  529.  
  530. o   To remain fairly keystroke compatible w/SLMR, I've made Ctrl-PgUp and
  531.     Ctrl-PgDn translate to Tab and Backspace, respectively.  This is during
  532.     message reading only; these keys perform next-thread, previous thread
  533.     functions.
  534.  
  535. o   Fixed a bug with the resetting of the original video mode upon exit.
  536.     Also, added the ability to specify ANY video line mode in the INI file.
  537.     This line count gets added to the video toggle round robin loop.
  538.     If you specify a video mode of 52, MR/2 loads this way (no error
  539.     checking is done - you'll stay in 25 line mode if 52 is invalid).
  540.     If you keep pressing ALT-V on packet select, you'll cycle through 25,
  541.     then 28, through 60 line mode.  After 60 line mode, you'll toggle back
  542.     to 52, then 25 again.  Get it?
  543.  
  544. o   Also, I "fixed" it so that if no VideoMode is specified in the INI file,
  545.     MR/2 defaults to whatever the current Video Mode is.
  546.  
  547. o   Default Word Wrap column for replies is now 80 (was 78).  I'm testing
  548.     this to see if quote-wrapping problems diminish while message-wrapping
  549.     problems remain in check.  If you specify a value in your INI file,
  550.     this change is irrelevant.
  551.  
  552. o   OldRead.Me (pre-1.0 history log) has been renamed to mr2.hst.  I'll
  553.     shuffle off older entries from read.me into this file as they become
  554.     kinda old.
  555.  
  556. o   Fixed some bugs with the "To" field getting confused when EditReply
  557.     Header was set only to AFTER.
  558.  
  559. o   Reformatted the Quick Thread Summary screen so that all subjects line
  560.     up, even if the read/message counst go to 2 digits.  This was also
  561.     necessary so that typing letter keys properly jump to the correct
  562.     spot.
  563.  
  564. o   3 New INI parameters.  BeepOnPersonals defaults to Yes and controls the
  565.     beep that is made when personal messages are displayed.  GoToLastRead
  566.     defaults to No.  If set to Yes, the "do you wish to return to your last
  567.     reading position" is suppressed and MR/2 just goes there automatically.
  568.     BackupOldReps defaults to true and controls the renaming of .rep files
  569.     to .old files instead of deleting them.
  570.  
  571. o   Another new parameter, by request.  You may optionally specify an
  572.     alternate editor command for use when creating NEW messages.  The
  573.     INI token NewMessageEditor may be set just as the Editor parameter is,
  574.     and this command will be used whenever writing a new message.  This
  575.     allows for differing startup macros.  The "new" editor is used for
  576.     ALL non-reply editing (including MR2.INI, News, Files, Bulletins,
  577.     Save files, etc).  If a "new message" editor is not specified, the
  578.     default Editor command is used for everything.
  579.  
  580. o   Modified the message formatter to tack on [M][][] to the end of the
  581.     "===" divider bar.  These are new mouse click areas.  The arrows cause
  582.     scrolling down and up.  Clicking on the M invokes the new "mouse menu".
  583.  
  584.     NOTE:  I was also going to assign the mouse menu to the middle mouse
  585.     button, if available, however, my middle mouse button doesn't seem to
  586.     function even after tweaking the MouSetEventMask parameters. Hmmm...
  587.  
  588. o   The new mouse menu can be displayed and used for keystroke simulation
  589.     while viewing a message.  Click in the new [M] box, and the mouse
  590.     menu is displayed offering 16 options.  Click on any of these options
  591.     to invoke that function or use the right mouse button to cancel.
  592.  
  593.     The older mouse hot areas are still functional.  For instance,
  594.     clicking on the message SUBJECT area simulates pressing "H" and
  595.     clicking on the CONF: area simulates an I.
  596.  
  597. o   I've also implemented double-clicking on selection lists.  This is
  598.     currently a must-do; the old method of single clicking simply
  599.     highlights the entry.  You must double click to select it.  I may let
  600.     you pick which method to use (single or double-clicking) via INI param.
  601.  
  602. o   If a packet is already open and you answer NO to the "use this one"
  603.     prompt, MR/2 now deletes MESSAGES.DAT.  Previously, the work directory
  604.     files remained undeleted until a packet was selected.  This caused
  605.     the "use this one" prompt to come up after any other function.  For
  606.     instance, each time the video mode was toggled, you'd have to answer
  607.     this prompt again.  Not any more!
  608.  
  609. o   I've changed the status line on the bottom of the packet select menu
  610.     and added a "mouse menu" on the right hand side.  Single click on a
  611.     packet name and then click on "[D]" to delete this packet.
  612.  
  613. o   If you used "X" to fast-exit MR/2 and a BBS "local" INI file was in
  614.     use, I still reloaded MR2.INI.  This step is now skipped resulting
  615.     in slightly faster exit speeds.
  616.  
  617. o   New INI parameters:  MouseMode=Single sets the mouse "click" mode to
  618.     Single or Double.  The NEW default is double clicking.  For those of
  619.     you who liked it the old way, set the mode to SINGLE.
  620.  
  621.     Also, MouseClickSpeed can be set to the maximum number of milliseconds
  622.     allowable between mouse clicks to still be considered a double-click.
  623.     The default is still being figured out - it'll be somewhere between
  624.     40 and 500.   OK, it's 500 :)
  625.  
  626.     AND ... MouseScrollSpeed sets the delay for scrolling when you park the
  627.     mouse with the left button down on a scrollbar arrow.  The default is
  628.     set to 1.  If this is too fast for you, change it to a higher value.
  629.  
  630. o   Made the same "out of bounds clicks are just ignored" change to the
  631.     menu routines.  Clicking out-of-bounds on the main menu canceled still.
  632.  
  633. o   Had to fix a timer to simulate mouse clicks for scrolling the message
  634.     viewer when parked on the mouse scroll arrows.
  635.  
  636. o   I've added a new canned-search parameter, "CHECK".  This enables you to
  637.     check for text in any combination of From, To, Subject and Message.
  638.     Message may be further sub-divided into Body and Origin.  I consider
  639.     the "origin" section to be anything after and including the first
  640.     "tear" line.  For Example:
  641.  
  642.     MakeConference = MR/2 - Tagline
  643.     Check = Origin
  644.     String = MR/2
  645.  
  646.     will check only the message section, and only below the first "---" or
  647.     "___" found in the message.  Further:
  648.     
  649.     MakeConference = MR/2 - No Taglines
  650.     Check = Subject,Body
  651.     String = MR/2
  652.  
  653.     will check message up to the first tearline, and will also check subject.
  654.     No sense in this case checking From and To, although I could have added
  655.     this.  You can find all message from Jim Gilliland this way and build
  656.     a conference of them.
  657.  
  658.     NOTE:  The message viewer will align the display on the first hit
  659.     in the message.  It will NOT ignore the body if the search was defined
  660.     as ORIGIN only.
  661.  
  662.     Leaving the CHECK string out will result in ALL areas being checked.
  663.  
  664.     This code was partially implemented before, I just had to add the INI
  665.     parameters and the origin splitting.
  666.  
  667.     This will be the base code for my twit filters - a little tweaking
  668.     and you'll be able to twit any message combination for which you can
  669.     build a custom conference.
  670.  
  671. o   Optimized the message section searching a little.  It *was*
  672.     converting the message to upper case for each search criteria
  673.     record, even though the first check had already converted it.  Now
  674.     it only converts the message on the first check, and only if the
  675.     message body is to be checked.
  676.  
  677. o   You can now forward the message you are reading to another user
  678.     and/or conference.  Simply press "W" (SLMR-compatible key) and the
  679.     Message Header Edit screen will appear.  Fill out the To field and
  680.     change anything else as needed.  Accepting this form will create
  681.     a forwarded copy of this message in the reply conference.
  682.  
  683.     NOTE:  MR/2's tagline does not appear in these messages UNLESS you
  684.     modify it later.  Making revisions toa forwarded message will cause
  685.     MR/2 to place/replace its tagline on the message.
  686.  
  687. o   When modifying a reply, MR/2 now extracts and reuses the original
  688.     tagline.  Previously, a new tagline would be automatically picked to
  689.     replace the original.
  690.  
  691. o   Modified the packet open logic to use an insert sort when creating the
  692.     list of Master Conferences.  Sorting after-the-fact was very slow.
  693.     PC-Ohio packets (w/600 conferences) load much faster now.
  694.  
  695. o   I tried setting the background conference builder to IDLE priority and
  696.     it would not work properly with PMInfo loaded.  Changed it back to
  697.     regular priority with a -30 delta.
  698.  
  699. o   I've implemented some basic "ANSI animation" code in the message viewer.
  700.     Press "A" while viewing any message with ANSI escape sequences and
  701.     see if it works.  Scrolling of the screen is hokey - I'll work on it
  702.     some more.  Some screens look OK, though :)
  703.  
  704. o   Ooops - big bug.  If Control.Dat was > 32k MR/2 would fail to read the
  705.     master conference list, and no mail could be read.  This limit is
  706.     now 64k, and I can easily just remove any limit with the next release.
  707.     The sample packet I was presented with had 2500 conferences available
  708.     and Control.dat was around 40K.
  709.  
  710. o   A "Working" message now displays while a packet is being opened by MR/2.
  711.     There was a substantial pause on packets with 600 conferences, and a
  712.     couple of seconds pause on the 2500 conference packet above.  It appears
  713.     that there's trouble (as all is quiet), and then the main menu pops up!
  714.  
  715. o   Trimmed the end of replies a little.  It was possible to get an extra
  716.     blank block (128 spaces) at the end of the message.
  717.  
  718.  
  719. Changes included in v1.31
  720. -------------------------
  721.  
  722. o   Modified the packet select clock display to show centered on the screen.
  723.     It was centered for short month names, but September (it *is* the longest
  724.     name) made it look lopsided.
  725.  
  726. o   ANSI animation is much improved ... I've still got some work to do.
  727.     Some of these ANSI messages are incredible!  Toggle MR/2 into 34 line
  728.     or greater mode to read stubborn messages.
  729.  
  730. o   OK, I've enabled "ANSI detect" for News, Bulletins and New Files.
  731.     Actually, if I would have enabled it, this would have worked well in
  732.     version 1.3.  Unfortunately, I only tested it with message reading, and
  733.     it didn't make any sense for these - if a message had ANSI codes, it
  734.     was a good bet it wanted full control of the screen, which I didn't
  735.     want to give unless requested by the user (the "A" key).  Now I find,
  736.     after sampling several BBS's (Wildcat's were suggested, then I find that
  737.     PCBoards with Graphics menus enabled sends ANSI codes also :), that
  738.     the non-message ANSI stuff tends to be much more behaved.  Anyway, test
  739.     it out, let me know of any problems.
  740.  
  741. o   For ANSI animations, had to enable the "blinking" attribute.  I then
  742.     set it back off for regular operations.
  743.  
  744.  
  745. Changes included in v1.32
  746. -------------------------
  747.  
  748. o   Blinking attribute still didn't work in the message/file viewer.  News
  749.     files with blinking text showed reverse video in some starnge color.
  750.  
  751. o   Custom conference search was still started on message entry w/o any
  752.     existing packets (ALT-E from the packet select screen).  There are
  753.     no message to search in this mode, but the thread was started and the
  754.     beep would occur almost instantly.  This has been fixed.
  755.  
  756. o   Modified the "ShowEmpties" default flag from YES to NO.  Set it to
  757.     YES in your INI file if you want empty custom conferences to show.
  758.  
  759. o   KeepMessageMarks would sometimes get corrupted and set to NO.  This
  760.     was caused by an error in the INI.CPP code that "dropped" into the
  761.     "K" parameter processing after doing the "H" processing (missing
  762.     break statement).  For some reason, the corruption was more sensitive
  763.     to opening a packet using WPS "associations" that direct MR/2 selection.
  764.  
  765. o   But then, there was still a problem with using WPS associations to
  766.     open a packet.  Problem also occured whenever simply passing a file
  767.     name on the command line.  MR/2 tried to save Bookmark EA's, but used
  768.     an invalid file name.  This is now working correctly.
  769.  
  770. o   Added NEWMR2.ICO to the distribution zip.  This is an MR/2 icon
  771.     submitted by Dennis Powell.  He claims it's better looking than mine,
  772.     and I guess I'll have to agree :).
  773.  
  774. o   The ANSI file viewers would clear the screen to the user-defined message
  775.     color before showing the file/screen.  This resulted in the "wrong"
  776.     background color.  I now clear the screen to black before showing text
  777.     using ANSI escape sequences.
  778.  
  779. o   Also, MR/2 left all ANSI display routines with the default screen colors
  780.     set to whatever the ANSI display last set.  I now set normal white on
  781.     black upon exiting these functions.
  782.  
  783. o   I made some changes to try to speed up the scrolling of selection lists.
  784.     The mods where to the video display routines, but seemed to do nothing.
  785.     I don't really see any slowness, unless I stand on the downarrow key.
  786.     These may be more a case of slow keyboard repeat.  I'll see if I can
  787.     modify this somehow.
  788.  
  789. o   When you change the FROM user when editing the reply header, the new
  790.     "from" name is remembered and becomes the default for as long as that
  791.     packet is open.  Once the packet is closed, the user name defaults
  792.     back to the one found in the control.dat file of each QWK file.
  793.  
  794. o   I removed survey.txt from the distribution zip.  I think I know what
  795.     the majority of folks want, and the zip file needs to be pruned a little.
  796.     Also removed Misc1.Tag, leaving Misc2.Tag and OS2.Tag.  These may get
  797.     trimmed or disappear altogether at some time ...
  798.  
  799. o   Also removed MR2.DOC from Welcome.qwk, the default, "I'm lost" new-user
  800.     packet.  I've replaced it with a small note about seeing mr2.doc as
  801.     a separate file.  This file was actually packed twice, now only once.
  802.  
  803. That's it for now ... I'll work on adding some actual enhancements as soon
  804. as I get MR/PM out and somewhat stable ... that'll probably take a week,
  805. or two, or three.  Look for MRPM_095.*
  806.  
  807.  
  808. Changes included in v1.33
  809. -------------------------
  810.  
  811. o   Forwarding messages had a problem with taglines.  The forwarded preface
  812.     was placed in the edit-header tagline field and could get corrupted.
  813.     Forwarded messages get no tagline; this field now displays blank and
  814.     any entry here is ignored.
  815.  
  816. o   On some messages, lines would be highlighted as quotes that were
  817.     obviously not.  This was from ghost characters from previous lines and
  818.     has been fixed.
  819.  
  820. o   Fixed a problem with the MR2.ID recognition routine.  Basically, if
  821.     any of my checksums calculated to a CR or a EOF (0x1A), the file would
  822.     not be recognized as valid.  This has been fixed.
  823.  
  824. o   If a zero length reply file was for some reason saved, then reedited,
  825.     MR/2 would throw a second tagline on the file.  Fixed.  I wonder if I
  826.     can reasonably detect the cases where the reply has been saved w/o
  827.     any user-added modifications and warn??
  828.  
  829. o   In the INI file, MouseMode now supports the keyword "Off" in addition
  830.     to SingleClick and DoubleClick.  All "Off" does is tells MR/2 to hide
  831.     the mouse cursor (the mouse is still active, just hidden).  ... by
  832.     registered user request.
  833.  
  834. o   New INI parameter SuppressVersionInTagline defaults to NO.  If
  835.     you're a registered user, you may set this to YES and the version
  836.     number(s) will be suppressed when MR/2 generates a tagline.  This
  837.     allows more room for your tagline message, particularly when used in
  838.     conjunction with "SerialInTag" set to NO.
  839.  
  840.  
  841. Changes included in v1.34
  842. -------------------------
  843.  
  844. o   The custom conference search "check" keyword ORIGIN has been modified
  845.     to recognize a lines starting as " * " as the "origin".  Also sees the
  846.     line as the start of the origin area if the "*" is instead an "X" or a
  847.     ASCII block char (0xFE).
  848.  
  849. o   The 1.33 tagline modifications to suppress the VERSION string worked OK,
  850.     but the new code messed up the non-suppressed version string for
  851.     registered users.  This has been fixed.
  852.  
  853. o   Added PMColors to the INI file processor.  This adds nothing to MR/2
  854.     classic - this is for the PM version :(.
  855.  
  856. o   Removed the file Read.Me from the Welcome.Qwk default packet.  This
  857.     was just a duplication of the file read.me that's distributed
  858.     separately.  Duplicating the file just made distribution zip's larger
  859.     and made extra work for me when packing up new versions.  Now, all
  860.     that's in the .qwk packet is instructions to read the read.me file.
  861.  
  862.  
  863. Changes included in v1.35
  864. -------------------------
  865.  
  866. o   Another control.dat problem was found pertaining to a specific BBS
  867.     (or BBS software/mail door?).  A registered user sent me a packet where
  868.     control.dat had the user name padded to about 40 characters max.  This
  869.     overwrote some internal variables (specifically, the BBSID) and the
  870.     system tried to create replies in a file named "       .msg".  This
  871.     is not legal and MR/2 would puke.  Since this has now caused trouble
  872.     twice, I've rewritten the routine to handle virtually any length of
  873.     user name.
  874.  
  875.  
  876. Changes included in v1.36
  877. -------------------------
  878.  
  879. o   Beeping on personal messages did not always work.  The comparing of
  880.     names was case sensitive, and worked only if the message name and the
  881.     user name in control.dat matched EXACTLY.  This has been corrected.
  882.  
  883. o    Modified the tagline "random" seeding in an attempt to make things more
  884.     "random".  Someone reported that the same taglines were coming up even
  885.     when set to RANDOM.  I could not recreate this, but an examination of my
  886.     code revealed that there were only 60 possible seeding combinations.
  887.     (I used time(NULL)%60).  I've changed this to offer a broader range of
  888.     starting seeds.
  889.  
  890. o   Tagline style now defaults to PC-Board.  This is 3 dashed as a tearline
  891.     and hi-end ASCII block characters as MR/2's signiture delimiters.  I
  892.     also added the keyword "TagStyle" to MR2INI.ORG.  It's been there for
  893.     a while, but I missed it when documenting and setting up this starter
  894.     INI file.
  895.  
  896. o   Fixed a thread-name formatting problem in the quick thread summary
  897.     logic (originally fixed in MR/2 PM).  The very last thread name would
  898.     sometimes be blank or some initial characters missing due to a previous
  899.     "RE:" being detected.  This has been fixed.
  900.  
  901. o   Modified the conference "sort" (when Alpha-sorted master conference
  902.     names are requested <the default>).  Previously, conference names
  903.     where inserted into the final linked list used by the QWK class in
  904.     insertion-sorted order.  In other words, I'd plow through the linked
  905.     list and find the right spot for a conference name and plop it
  906.     there. This was extremely slow for large lists.  Now, names are
  907.     recorded (sorted) in a BTREE structure, then transfered into
  908.     linked-list format. The increase in speed (using PC-Ohio's 1000+ and
  909.     Channel 1's 2200+ conference lists as tests) is dramatic.  I'm
  910.     happy, I hope you are too.
  911.  
  912.  
  913. Changes included in v1.37
  914. -------------------------
  915.  
  916. o   The selection box logic had some problems when working in modes
  917.     with a large number of display lines (e.g., 60 line mode).  Pressing
  918.     enter on the 32nd listed entry or beyond was treated by MR/2 as being
  919.     a letter-character command and the "ENTER" would be ignored.  This has
  920.     been fixed.
  921.  
  922. o   Added a new member of zEq, the event class.   The event function
  923.     rehidemouse() can be used after a video mode change.  If the mouse
  924.     flag says it should be hidden, MouRemovePtr() is called with the
  925.     current screen size.  If the mouse flag says the mouse is *not*
  926.     hidden, nothing is done.
  927.  
  928. o   The changing of video modes (number of display lines) caused the mouse
  929.     cursor to sometimes become visible when it shouldn't.  This has been
  930.     corrected.  Also, if MouseMode was set to OFF and you replied to any
  931.     message, the mouse would appear upon return from the editor (the mouse
  932.     flag was reset to "show" upon return).  This has been fixed.
  933.  
  934. o   In an early and primitive attempt to support long file names, I've
  935.     switched to the linker distributed with the MS v1.2 toolkit.  It seems
  936.     blink (Zortech's linker) doesn't like the LONGNAMES keyword in the
  937.     .def file.  Hopefully, nothing strange will happen :)
  938.  
  939.  
  940. Changes included in v1.38
  941. -------------------------
  942.  
  943. o   If EditHeader was set to AFTER only and an existing reply was modified,
  944.     "your" name would appear in the TO field as well as the FROM field.
  945.     This was the result of a 9/2/92 patch for AFTER mode, but the patch
  946.     should not effect editing of replies.  Fixed.
  947.  
  948. o   While working in Header Editing "AFTER" mode I also discovered that
  949.     the subject of a "Write new" message was often filled in with the
  950.     last read  message's subject.  Subjects are now blanked out when
  951.     writing a "new"  message.
  952.  
  953. o   Write new: conference numbers > 1000 would only show last 3 digits.
  954.     Display now is widened by one and 4 digit conference numbers displayed.
  955.  
  956. o   Conference select when editing the message header has been expanded
  957.     in width by one character to match Write new conference select.
  958.  
  959. o   My testing of BBS's with 4 digit conference support failed to find one
  960.     possibility.  It was reported that, at least once, some QWK door produced
  961.     4-digit index files for conference numbers < 1000.  For instance,
  962.     conference 1 would be indexed by 0001.ndx.  "Normal" doors seem to use
  963.     3 digits *until* the conference number grows to 1000 or more.  MR/2 now
  964.     supports and auto-detects both types.
  965.  
  966. o   Enhanced the tagline stealer to recognize taglines made by the BlueWave
  967.     mail reader.  Added recognition for Speed Reader's method, also.
  968.  
  969. o   A packet was provided to me that had strange, extremelly long conference
  970.     names; actually conference names followed by comment-like descriptions.
  971.     These long names were causing strange screen-wrapping problems.  I've
  972.     now got a 60-char maximum box width set for conference names.  Names
  973.     longer that this will be truncated ... they won't look pretty, but they'll
  974.     look better than what I just saw :)
  975.  
  976. o   My new/faster btree sorting method would toss out duplicate
  977.     conference names.  This wouldn't normally be a problem, but OS/2
  978.     Shareware's QWK door truncates all Usenet news feed names to
  979.     "Comp.Os.Os2.". Versions using the old sort method (or new ones with
  980.     Alpha sorting OFF) would show multiple conferences all with the same
  981.     name.  New version show the conference only once, if at all.
  982.     Collisions (duplicate names) are now handles as unique records and
  983.     added - so all conferences show up. They're still named the same.
  984.     I've netmailed OS/2 Shareware with a description of the problem.
  985.  
  986. o   Conference name boxes on "Write new" and header-editing selection now
  987.     adjust their width to accomodate long conference names.  (Kind of a
  988.     continuation of the fix above).
  989.  
  990. o   I've been making alot of minor changes and improvements and haven't
  991.     been too careful about remembering them.  Let's see, I found a minor
  992.     bug with adding replies.  Every time you replied, a 30 byte chunk of
  993.     memory was allocated for the conference listing, and any older conference
  994.     record was never freed.  You'd have to make quite a few replies before
  995.     this would create a problem - but it's fixed anyway.  The "Read" indicator
  996.     on the message index and quick thread summary has been changed from
  997.     "*" to "√".  I think it looks nicer.
  998.  
  999. o   Tagline stealer can now steal wider taglines - 76 chars in length max.
  1000.  
  1001. o   Added some code to detect "&" symbol in BBS name.  This was causing
  1002.     the OS/2 CMD.EXE to do strange things when passed to PKZip and PKUnzip.
  1003.     MR/2 now wraps all BBSID-based names that contain a "&" in quotes.
  1004.  
  1005.